% Вторая глава работы 
\chapter{Distributed Network Address Translation }
\label{chap2}

\section{Архитектура}
\label{chap2:sec1}
Каждый  хост имеет свой индивидуальный IP адрес, который может быть транслирован во внешний со стороны Интернета. Используя механизм DNAT, стек TCP/IP хостов запрограммирован так, что их IP -- уровни использует локальные адреса для связи внутри подсети. Пакеты, направленные на удаленные хосты, проходят через DNAT -- маршрутизаторы. 

Каждый из хостов имеет 2 IP-адреса: постоянный локальный адрес и адрес подсети. Последний –-- внешний адрес DNAT маршрутизатора.Для того, чтобы маршрутизатору не приходилось поддерживать все трансляции, хосту рекомендуется использовать некоторое количество портов, уникальных для локальных ресурсов всех внешних передач. 

\section{Протокол Распределения Портов}
\label{chap2:sec2}
Протокол Распределения Портов (PDP --- Port Distribution Protocol) используется в DNAT локальных сетей, чтобы гарантировать, что все хосты используют локально-уникальные однодневные номера портов. Протокол  состоит из трех частей:
\begin{itemize}
\item PDP -- запрос
\item PDP -- ответ
\item PDP -- аннуляция
\end{itemize}

PDP запрос посылается из хоста маршрутизатору для запроса блока номеров порта. К заголовку IP прибавляется следующее: 
\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{PDP-rec}}
 \caption{PDP запрос}
\label{fig1}
\end{figure}

Поля соответствуют ICMP (Internet Control Message Protocol) и имеют следующие характеристики:
\begin{itemize}
\item Тип(Type) – 1 байт
\item Код(Code) – 1 байт: 0 для портов свыше 10000, 128 для портов ниже 10000.
\item Контрольная сумма(Checksum) - 2 байта: 16 бит  довершение первой суммы дополнения всего запроса.  В целях облегчения подсчета контрольной суммы изначально ее поле равно 0. 
\item Запрашиваемые порты(Ports requested) – 1 байт: количество портов, запрашиваемых хостом. По умолчанию задано либо 16 либо 32, что является достаточным для нужд большинства хостов.
\item Неиспользуемое (Unused) – 3 байта: 0.
\end{itemize}

Хост будет  передавать PDP -- запрос с boot или, если требуется несколько портов, то запрос временно будет локализирован. PDP –- ответ посылается от маршрутизатора к хосту или подтверждая, или отклоняя запрос. К дополнению IP заголовка он имеет следующий формат:
\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{PDPresponse}}
 \caption{PDP ответ}
\label{fig1}
\end{figure}
Поля определены как:
\begin{itemize}
\item Тип(Type) – 1 байт
\item Код(Code) – 1 байт: 1.
\item Контрольная сумма(Checksum) - 2 байта: 16 бит  довершение первой суммы дополнения всего запроса.  В целях облегчения подсчета контрольной суммы изначально ее поле равно 0. 
\item Нижний порт(Lowest port) – 2 байта: Номер нижнего порта в блоке.
\item Количество портов(Total ports) – 1 байт: Общее количество портов, прикрепленных к хосту.
\item Неиспользуемое (Unused) – 3 байта: 0.
\end{itemize}

При получении  положительного PDP -– ответа, хост делает пометку в блоке о том, что порт доступен для использования. Хост содержит эти порты в структуры данных и флаги, показывающее, где они находятся или используются ли. При получении отрицательного PDP – запроса, хост может послать несколько других запросов на увеличение количества портов, если это необходимо. Если маршрутизатор не может связаться с достаточно объемным блоком смежных портов для хоста, он может ответить положительным кодом, но занять меньше портов, чем запрашивалось.
Маршрутизатор поддерживает карту портов с внешними IP -- адресами в PTIP -- таблице. Вход в PTIP таблицу показана ниже. Для одного и того же IP адреса может быть несколько входов. 
\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{PDPinvalidate}}
 \caption{PTIP таблица}
\label{fig2}
\end{figure}

PDP аннуляция используется чтобы аннулировать порты, которые на данный момент привязаны к хосту. Он имеет следующий формат:

\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{FilePTIP}}
 \caption{PDP аннуляция}
\label{fig3}
\end{figure}

Поля определяются следующим образом:
\begin{itemize}
\item Тип(Type) – 1 байт:32.
\item Код(Code) – 1 байт: 2.
\item Контрольная сумма(Checksum) - 2 байта: 16 бит  довершение первой суммы дополнения всего запроса.  В целях облегчения подсчета контрольной суммы изначально ее поле равно 0. 
\item Порт(Port) – 1 байт: Номер порта, используемого хостом.
\item Неиспользуемое (Unused) – 3 байта: 0.
\end{itemize}

Возможно, что 2 хоста были расположены ошибочно, перекрывая блоки портовых номеров(например, в результате сбоя или перезагрузки маршрутизатора). При приеме пакета от хоста к Интернету, маршрутизатор должен проверять PTIP -- таблицу для уверенности, что номер source port среди блоков, привязанных к хосту. Если порт с этим номером не привязан к хосту, маршрутизатор не может идентифицировать пакет, отклоняет его и посылает PDP аннуляция хосту.При получении  PDP аннуляциясообщения, хост должен прекратить использование всех используемых на данный момент портов и запросить новый блок портов. PDP -- аннуляция также может использоваться для предотвращения простоя портов, заставив хост освободить несколько или даже все порты, которые были зарезервированы. Маршрутизатор должен послать PDP аннуляция к любому хосту, который связан с внешним хостом более, чем 10 минут. Когда маршрутизатор перезагружается, он должен признать недействительным все привязанные порты посылкой PDP -- аннуляция к каждому хоcту.Когда порт или некоторое множество портов на хосте не действительны, все текущие транзакции между хостом и внешними сервером будут прерваны. DNAT маршрутизатор должен попытаться «загасить» недавно признанные недействительные номера порта на некоторый период времени, так что они небудут связаны с хостом, пока внешний сервер все еще пытается передать номера портов.

\section{Диаграммы взаимодействия}
\label{chap2:sec3}
В данной секции будет проиллюстрировано взаимодействие между локальным хостом и DNAT маршрутизатором с помощью блок-схем. Когда хост связывается с внешним сервером, он посылает канальные IP -- пакеты в локальную подсеть. Заголовок исходящего IP -- пакеты будет содержать локальный IP хоста как ресурса и локальный IP -- адреса маршрутизатора как пункта назначения. Заголовок входящего IP-пакеты будет содержать внешний IP -- подсети как адрес ресурса и Ip адрес внешнего сервера как пункта назначения. Порт ресурса должен быть уникальным для локальной сети. При отсутствии свободного порта необходимо зарезервировать еще один с помощью PDP -- запроса. Когда хост передает данные другому локальному хосту, ни туннелей ни локально уникального порта ресурсов не требуется. 

%Рисунок DNAT host transmission process. 
\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{DNATHostTransmissionProcess}}
 \caption{Процесс передачи DNAT -- хоста}
\label{fig3}
\end{figure}


Остается  вопрос, как локальный хост может  определить, является ли передача внешней  или внутренней. Так как не одна подсеть может стоять за DNAT маршрутизатором, проверка масок локальных подсетей не сработает. Для решения этой проблемы есть альтернативный путь: требуется, что бы DNAT маршрутизатор знал все маски подсетей, используемые DNAT подсетями, с которыми он работает.

\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{DNATRouterOperationsOnOutgoingPackets}}
 \caption{Операции DNAT -- маршрутизатора над исходящими пакетами}
\label{fig3}
\end{figure}

Когда туннельный пакет, отправленный локальным хостом, достигает DNAT маршрутизатора, маршрутизатор должен свериться со своей PTIP -- таблицей, что IP -- адрес ресурса есть среди разрешенных хостом. Если нет, то маршрутизатор пересылает PDP -- аннуляция  и отклоняет пакет.


%Рисунок DNAT router operations on incoming packets. 

\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{DNATRouterOperationsOnIncomingPackets}}
 \caption{Операции DNAT -- маршрутизатора над входящими пакетами}
\label{fig3}
\end{figure}
Когда DNAT маршрутизатор получает пакет от внешнего хоста, маршрутизатор первым делом удостоверивается, что получающий порт зарегистрирован в PTIP -- таблице. Если его не оказывается, пакет удаляется, а внешнему серверу отправлется сообщение об ошибке. Иначе, DNAT -- маршрутизатор находит IP -- адрес пункта назначения в PTIP -- таблице.
Когда DNAT -- хост получает пакет, первым делом он определяет, какой ресурс: внутренний или внешний. Это возможно благодаря проверке следующего поля протокола исходящего IP -- заголовка. Если ресурс --- локальный, может быть использовано нормальное получение. Если внешний, исходящий IP -- заголовок должен быть раскрыт и тогда возможна обычная передача.

%Рисунок DNAT host reception process. 
\begin{figure}[!h!]
 \centerline{\includegraphics[width=0.7\textwidth]{DNATHostReceptionProcess}}
 \caption{Процесс получения DNAT -- хоста}
\label{fig3}
\end{figure}
\cite{lit3}

%%% Local Variables:
%%% mode: latex
%%% coding: utf-8-unix
%%% TeX-master: "../default"
%%% End:
